/*
  该方法暴露出去的是一个promise，经纬度在resolve的第一个参数里
  使用方法：  startLocation.then(({lat, lng}) => {这里就是你的方法})
*/
/* eslint-disable */ 
// 将gps 经纬度转为高德经纬度，精度要求高的需要这个东西
import {
    GPS
  } from './GPS2AMAP'
  let callback = null // promise 的 resolve会赋值给这个函数
  // gps 定位成功回调
  const onSuccess = (position) => {
    // const {
    //   latitude: lat,
    //   longitude: lng
    // } = position.coords
    // const exchange = GPS.gcj_encrypt(Number.parseFloat(lat), Number.parseFloat(lng)) // 对精度要求不高可以省略这步，把上面获取到的经纬度直接传给saveLocation
    // console.log('gps定位', `${exchange.lat}-${exchange.lng}`)
    // saveLocation(exchange.lat, exchange.lng)
    initAMAP()
  }
  // gps 定位失败回调
  const onError = () => {
    initAMAP()
    console.error('gps失败')
  }
  // 初始化高德，加载高德js
  const initAMAP = () => {
    const key = '7689b2155b3b7beb00f1173a1d11acef', // 从高德买来的key
          MP = new Promise(function (resolve, reject) {
            window.init = function () {
              resolve(AMap)
            };
            let script = document.createElement("script");
            script.type = "text/javascript";
            script.src = "//webapi.amap.com/maps?v=1.4.6&key="+key+"&callback=init";
            script.onerror = reject;
            document.head.appendChild(script);
          })
    MP.then(function (AMap) {
      startAMAPLocation(AMap)
    }).catch(err=>{
      console.error(JSON.stringify(err));
    })
  }
  
  // 开始高德定位
  const startAMAPLocation = (AMap) => {
    AMap.plugin('AMap.Geolocation', function () {
      var geolocation = new AMap.Geolocation({
        enableHighAccuracy: true, //是否使用高精度定位，默认:true
        timeout: 8000, //超过10秒后停止定位，默认：5s
        buttonPosition: 'RB', //定位按钮的停靠位置
        buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量，默认：Pixel(10, 20)
        zoomToAccuracy: true, //定位成功后是否自动调整地图视野到定位点
      });
      // map.addControl(geolocation);
      geolocation.getCurrentPosition(function (status, result) {
        if (status == 'complete') {
          console.log('高德: ', `${result.position.lat},${result.position.lng}`)
          saveLocation(result.position.lat, result.position.lng)
        } else {
                  // alert(JSON.stringify(result));
          saveLocation(0, 0)
        }
      });
    });
  }
  // 处理获取到的经纬度
  const saveLocation = (lat = 0, lng = 0) => {
    lat && (lat = parseFloat(lat).toFixed(6))
    lng && (lng = parseFloat(lng).toFixed(6))
    typeof callback === 'function' && callback({lat, lng})
  }
  
  // promise, resolve的第一个参数就是经纬度，
  const startLocation = new Promise((resolve, reject) => {
    callback = resolve
    const options = {
      enableHighAccuracy: true,
      maximumAge: 1000,
      timeout: 5000
    }
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(onSuccess, onError, options)
    } else {
      saveLocation(0, 0)
      alert('您的浏览器不支持地理位置定位')
    }
  })
  export default startLocation